/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Problemas;

import Busquedas.Estado;
/**
El Problema cosiste en limpiar 2 posiciones la izquierda y la derecha
 */
public class Aspirador extends Problema {

    private int posicion;
    private int basuraizq;
    private int basuradcha;
    /*
    Posicion: 0 izq , 1 derecha
    Basura:   0 Asuencia de Basura, 1 Presencia de Basura
    */
    public Aspirador(){

                int[] paramInicial={0,1,1};
		int[] paramObjetivo = {0,0,0};
                int[] paramObjetivo1 = {1,0,0};
		Estado inicial = new Estado(paramInicial);
		Estado [] objetivo = new Estado[2];
		objetivo[0] = new Estado(paramObjetivo);
        objetivo[1] = new Estado(paramObjetivo1);
		String [] nombresOperadores={"padre","moverizq","moverdcha","succionar"};
		int [] costeOperadores={1,1,1};
		inicializa(inicial,objetivo,3,nombresOperadores,costeOperadores);

    }

    public void asignaParametros(Estado actual){
		posicion = actual.getParametro(0);
		basuraizq = actual.getParametro(1);
		basuradcha = actual.getParametro(2);
	}

    public Estado moverizq(Estado actual){
        if(actual.getParametro(0)==0)
            return null;
        else{
                System.out.println("izk"); 
		int param[] = {0,actual.getParametro(1),actual.getParametro(2)};
		return new Estado(param);
            }
	}


    public Estado moverdcha(Estado actual){
       if(actual.getParametro(0)==1)
            return null;
            else{
                        System.out.println("dcha "); 
			int param[] = {1,actual.getParametro(1),actual.getParametro(2)};
			return new Estado(param);
	}}

    public Estado succionar(Estado actual){
         System.out.println("succion "); 
	if (actual.getParametro(0)==0) {
            if (actual.getParametro(1)==0) 
                return null;
            int param[] = {actual.getParametro(0),0,actual.getParametro(2)};
            return new Estado(param);
              
            }
            else{
                if (actual.getParametro(2)==0)
                    return null;
                int param[] = {actual.getParametro(0),actual.getParametro(1),0};
                return new Estado(param);
            }

	}
   	public Estado aplicaOperador(Estado actual,int i){
		int[] paramInicial={0,1,1};
                Estado siguiente = new Estado(paramInicial);
		switch(i){
		case 0:
			siguiente = moverizq(actual);
			break;
		case 1:
			siguiente = moverdcha(actual);
			break;
		case 2:
			siguiente = succionar(actual);
			break;
		}
		return siguiente;
	}
    public int funcionHeuristica(Estado estado){
		return 0;
	}
    public int getOperadorInverso (int op){
            return -1;
    }
}
